/*
1:下载导入axios
2:创建一个axios副本(create)
3:设置基地址
4：设置请求与响应拦截
5：暴露出去
6：api/模块.js
7:导入使用
*/
import axios from 'axios'
import { Toast } from 'vant' // Toast===this.$toast
import store from '@/store' // store===this.$store
import router from '@/router' // router===this.$router
const instance = axios.create({
  baseURL: 'http://toutiao.itheima.net/'
  // baseURL: 'http://geek.itheima.net/'
})
instance.interceptors.request.use(
  config => {
    if (store.state.user.tokenObj.token) {
      config.headers.Authorization = `Bearer ${store.state.user.tokenObj.token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

instance.interceptors.response.use(
  // 2开头
  res => {
    return res.data
  },
  // 非2开头,语法错误了
  async error => {
    if (error.response) {
      // token失效
      if (error.response.status === 401) {
        try {
          //  获取一个新的token替换旧token  (抢救token)
          //    抢救：通过refresh_token调用接口获取一个新的token
          const res = await axios({
            url: 'http://toutiao.itheima.net/v1_0/authorizations',
            method: 'put',
            headers: {
              Authorization: `Bearer ${store.state.user.tokenObj.refresh_token}`
            }
          })
          console.log('抢救token', res)
          // 抢救成功：保存token,继续上一次请求
          store.commit('user/setTokenObj', {
            refresh_token: store.state.user.tokenObj.refresh_token,
            token: res.data.data.token
          })
          // 继续上一次请求
          return instance(error.config)
        } catch {
          // 抢救token失败
          // 1:删除token与用户信息
          store.commit('user/logout')
          // 2:跳转至登录页、
          router.push('/login?redirect=' + location.href.split('#')[1])
        }
      }
      Toast.fail(error.response.data.message)
    }

    return Promise.reject(error)
  }
)
export default instance
